package hazelcast; import com.hazelcast.config.Config; import com.hazelcast.config.EntryListenerConfig; import com.hazelcast.config.MapConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; import microservices.sample.discovery.PublishedServiceInfo; import java.time.Duration; import java.util.Map; import java.util.Random; import java.util.concurrent.TimeUnit; /** * @author mamad * @since 16/03/15. */ public class HazelcastApp { private final HazelcastInstance hazelcastInstance; private final int id; public HazelcastApp(String name, int id) { this.id = id; Config config = new Config(); MapConfig mapConfig = new MapConfig(); mapConfig.setName("nodes"); mapConfig.addEntryListenerConfig(new EntryListenerConfig(MapEntryListener.class.getCanonicalName(), false, true)); config.addMapConfig(mapConfig); config.setInstanceName(name + id); hazelcastInstance = Hazelcast.newHazelcastInstance(config); } public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); HazelcastApp app = new HazelcastApp("App", new Random().nextInt(10)); app.doSomeWork(); app.waitFor(20, TimeUnit.SECONDS); app.shutdown(); System.out.println("total time:" + Duration.ofMillis(System.currentTimeMillis() - start)); } private void doSomeWork() { IMap<Object, Object> nodes = hazelcastInstance.getMap("nodes"); if (!nodes.containsKey("node" + id)) { nodes.put("node" + id, "Hello"); nodes.put("info" + id, new PublishedServiceInfo<>(String.class, "ip", id, "0.1")); } for (Map.Entry<Object, Object> entry : nodes.entrySet()) { System.out.printf("%s = %s%n", entry.getKey(), entry.getValue()); } } private void shutdown() { hazelcastInstance.shutdown(); } private void waitFor(long amount, TimeUnit unit) throws InterruptedException { Thread.sleep(unit.toMillis(amount)); } }